﻿#region Copyright (c) 2010 R. Uittenbosch
/*
* Copyright (C) 2010 R. Uittenbosch
* 
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 
* associated documentation files (the "Software"), to deal in the Software without restriction, including 
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the 
* following conditions:
* 
* The above copyright notice and this permission notice shall be included in all copies or substantial 
* portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 
* EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#endregion

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Mobile.Mvc;
using LinkedIn.Mobile.Properties;
using TouchUI.System.Mobile.Mvc;

namespace LinkedIn.Mobile
{
  public partial class LoginForm : ViewForm , IView<LoginModel>
  {
    /// <summary>
    /// Constructor
    /// </summary>
    public LoginForm()
    {
      InitializeComponent();
      // Set the correct images
      
      explainLabel.Text = Strings.VerifierCodeHeader;

    }

    /// <summary>
    /// Override the Show behaviour to set the TopMost property
    /// </summary>
    public new void Show()
    {
      NavigatorService.TopMost = this;
      base.Show();
    }

    /// <summary>
    /// The model has been updated by the controller
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void OnModelUpdated(object sender, EventArgs e)
    {
      // The control doubles as exceptionhandler
      if (Model.ExceptionOccured)
      {
        this.ExceptionLbl.Location  = new System.Drawing.Point(3, 13);
        this.ExceptionLbl.Size      = new System.Drawing.Size(234, 215);
        this.ExceptionLbl.Text      = Model.ExceptionMessage;
        this.Name                   = Strings.ErrorHeader;
      }
      // What should we show
      this.ExceptionLbl.Visible = Model.ExceptionOccured;

      this.VerifierCodeTbx.Visible    = !Model.ExceptionOccured;
     
      this.explainLabel.Visible       = !Model.ExceptionOccured;

      // The Ok button is always there
      this.ImgBtnOk.Visible = true;
      this.ImgBtnOk.Enabled = true;
      this.Show();
      this.OnViewStateChanged("Visible");
    }

    protected override void OnUpdateView(string key)
    {
    }

    #region IView<LoginModel> Members

    public new ViewDataDictionary<LoginModel> ViewData
    {
      get;
      set;
    }

    public new LoginModel Model
    {
      get
      {
        return this.ViewData.Model;
      }
      set
      {
        this.ViewData.Model = value;
      }
    }

    #endregion

    private void OkBtn_Click(object sender, EventArgs e)
    {
      if (!Model.ExceptionOccured)
      {
        // Notify the controller
        this.ViewData["VerifierCode"] = VerifierCodeTbx.Text;
        Cursor.Current = Cursors.WaitCursor;
        this.OnViewStateChanged("Ok");
      }
      // Always Hide
      this.Hide();
    }


    private void VerifierCodeTbx_GotFocus(object sender, EventArgs e)
    {
      inputPanel1.Enabled = true;
    }

    private void VerifierCodeTbx_LostFocus(object sender, EventArgs e)
    {
      inputPanel1.Enabled = false;
    }

    private void CancelBtn_Click(object sender, EventArgs e)
    {
      Application.Exit();
    }

    private void LoginForm_Resize(object sender, EventArgs e)
    {
      Common.Instance.ClientRectangle = Screen.PrimaryScreen.WorkingArea;
      Common.Instance.ClientRectangle = new Rectangle(
                    Screen.PrimaryScreen.WorkingArea.X,
                    Screen.PrimaryScreen.WorkingArea.Y,
                    Screen.PrimaryScreen.WorkingArea.Width, this.Height);

      this.VerifierCodeTbx.Width = this.Width;
      this.explainLabel.Width = this.Width;
      this.Refresh();
    }

  }
}